package com.cgg.java8.ch01;

import com.alibaba.fastjson.JSON;
import com.cgg.java8.entity.Apple;
import com.cgg.java8.utils.Utils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

/**
 * @author Xiecheng create on 2021/9/14
 */
public class Demo01 {
    public static void main(String[] args) {
        List<Apple> apples = Arrays.asList(
                new Apple("green", 20),
                new Apple("red", 30),
                new Apple("pink", 40),
                new Apple("yellow", 50)
        );
        // 筛选绿色苹果
        Utils.printListAsJson(filterGreenApples(apples));
        // 筛选任意颜色苹果
        Utils.printListAsJson(filterApplesByColor(apples, "pink"));
    }

    /**
     * 筛选绿色的苹果. 用之前的写法
     */
    private static List<Apple> filterGreenApples(List<Apple> apples) {
        List<Apple> result = new ArrayList<>();
        for (Apple apple : apples) {
            if ("green".equals(apple.getColor())) {
                result.add(apple);
            }
        }
        return result;
    }

    /**
     * 根据颜色筛选苹果
     *
     * @param apples
     * @param color
     */
    public static List<Apple> filterApplesByColor(List<Apple> apples, String color) {
        List<Apple> result = new ArrayList<>();
        for (Apple apple : apples) {
            if (color.equals(apple.getColor())) {
                result.add(apple);
            }
        }
        return result;
    }

    // 如果果农又要求添加重量维度. 会写大量重复代码
    // 而且非常不推荐写一个大而全的方法. 比如包含color, weight... 等等的筛选方法, 因为你不知道苹果会扩展哪些属性
    // 抽象到更高层次, 我们其实是在根据 对象的某些属性, 来比较判断, 最终得到一个boolean值. 即一个 predicate
    // 可以定义一个接口, 和一些策略, 来完成我们具体的操作. 见Demo02

}
